#pragma once
#include "sentencia.h"
#include "expr.h"
class Repita :
	public Sentencia
{
public:

	Repita(Sentencia *next,Expr *expr,Sentencia* instrucciones):Sentencia(next)
	{
		this->expr = expr;
		this->instrucciones=instrucciones;
	}

	~Repita(void)
	{
	}

		Expr* getExpr(){
		return this->expr;
	}

	Sentencia* getInstrucciones(){
		return this->instrucciones;
	}

	void setExpr(Expr *expr){
		this->expr=expr;
	}

	void setInstrucciones(Sentencia *instrucciones){
		this->instrucciones = instrucciones;
	}

	virtual string is(){
		return "REPITA";
	}

	virtual tipo_ts * validarSemantica(tabla_simbolos *tabla_de_tipo,tabla_simbolos *tabla_de_varaible){
		tipo_ts *tts = this->expr->validarSemantica(tabla_de_tipo,tabla_de_varaible);
		if(tts->is().compare("BOOLEANO")==0){
			if(this->instrucciones!=0){
				this->instrucciones->validarSemantica(tabla_de_tipo,tabla_de_varaible); 
			}

		}else{
			stringstream out;
			out<<"Expreccion debe de ser booleana"<<endl;
			throw exception(out.str().c_str());
		}

		if(this->getNext()!=0){
		this->getNext()->SetReturn(this->GetReturn());
		this->getNext()->validarSemantica(tabla_de_tipo,tabla_de_varaible);
		}
		return 0;
	}
private:
	Expr *expr;
	Sentencia *instrucciones;

};

